package com.boat.framework.common.event;

import org.springframework.context.ApplicationEventPublisher;

import com.boat.framework.common.util.SpringUtils;

import lombok.extern.slf4j.Slf4j;

/**
 * 事件发布，为减少依赖，采用spring自带的事件机制,而不是Guava
 * 使用方法：
 * 1,EventPub.instance().post(new DemoEvent());
 * 2,在@Service类中，使用@EventListener public void listen(DemoEvent event){}
 * @author 周江
 *
 */
@Slf4j
public class EventPub {
	private static EventPub instance = new EventPub();

	public static EventPub instance() {
		return instance;
	}

	public void post(Object event) {
		ApplicationEventPublisher publisher = SpringUtils.getEventPublisher();
		if (publisher == null) {
			log.warn("不能获取到Spring事件发布对象，事件将不能被正确发送");
		} else {
			publisher.publishEvent(event);
		}
	}
}
